﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RN.ERP.Web.ModelService;
using Newtonsoft.Json;
using Fly.Common.Linq;
using Fly.Common.WorkFlow;
using Telerik.Web.UI;
using Telerik.Web.UI.Skins;

namespace RN.ERP.Web.Enterprise
{
    public partial class EnterpriseCorpList1 : BasePage
    {
        protected string AreaCode
        {
            get
            {
                return UserInfo.CurrentArea;
            }
        }

        protected string RoleId
        {
            get
            {
                return UserInfo.RoleId;
            }
        }
        private EnterpriseService.EnterpriseServiceClient enterpriseServiceClient = new EnterpriseService.EnterpriseServiceClient();
        private BasicService.BasicServiceClient basicServiceClient = new BasicService.BasicServiceClient();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                hdnClassID.Value = Request["classId"];
                InitStatisticsCondition();
                BindFlowCode();
                ////100系统特殊功能-锁定企业
                if (UserInfo.RoleType == "Manager" && SystemID == "100")
                {
                    ListCorps.Columns[9].Visible = true;
                }
               
            }
        }

        /// <summary>
        /// 客户端grid刷新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void RadAjaxManager1_AjaxRequest(object sender, AjaxRequestEventArgs e)
        {
            if (e.Argument == "Rebind")
            {
                ListCorps.MasterTableView.SortExpressions.Clear();
                ListCorps.MasterTableView.GroupByExpressions.Clear();
                ListCorps.Rebind();
            }

        }
        protected void ListCorps_NeedDataSource(object source, GridNeedDataSourceEventArgs e)
        {
            string ClassId = Request.QueryString["classId"];
            var queryCondition = hdnCondition.Value;
            if (string.IsNullOrEmpty(queryCondition))
            {
                queryCondition = GetCondition();
            }
            var corp = enterpriseServiceClient.GetCompanyAllInfo(queryCondition, ListCorps.PageSize, ListCorps.CurrentPageIndex + 1, UserInfo.CurrentArea);
            var corpInfo = JsonConvert.DeserializeObject<IList<CompanyInfo>>(corp);
            int cnt = enterpriseServiceClient.GetCompanyCount(queryCondition, UserInfo.CurrentArea);
            ListCorps.AllowCustomPaging = true;
            ListCorps.VirtualItemCount = cnt;
            ListCorps.DataSource = corpInfo;
        }


        protected string GetCorpClassKind(string type)
        {
            string output = string.Empty;
            if (!String.IsNullOrEmpty(type))
            {
                Dictionary<string, string> CorpTypeDic = JsonConvert.DeserializeObject<Dictionary<string, string>>
                    (Application[ApplicationConstant.APPLICATION_CORPUSERTYPE].ToString());
                try
                {
                    output = CorpTypeDic[type];
                }
                catch
                {
                    output = "";
                }
            }
            return output;
        }

        private string GetCondition()
        {
            List<QueryCompanyInfoCondition> queryCompanyInfoList = new List<QueryCompanyInfoCondition>();
            QueryCompanyInfoCondition queryCompanyInfoCondition = new QueryCompanyInfoCondition();
            string classId = Request.QueryString["classId"];
            string corpName = txtCorpName.Text.Trim();
            string flowCode = ddlStatus.SelectedValue;
            List<string> listFlow = GetFlowCodes();
            if (listFlow.Count > 0)
            {
                foreach (var flow in listFlow)
                {
                    QueryCompanyInfoCondition con = new QueryCompanyInfoCondition();
                    int clsId = -1;
                    if (!string.IsNullOrEmpty(classId) && int.TryParse(classId, out clsId))
                    {
                        con.classID = new ParameterValue<int?>() { O = OptEnum.Equal, V = clsId };
                    }
                    if (!string.IsNullOrEmpty(corpName))
                    {
                        con.CorpName = new ParameterValue<string>() { O = OptEnum.Like, V = corpName };
                    }
                    ////两位地区则不做地区限制，能够看到外地企业
                    if (UserInfo.AreaCode.Length >= 4)
                    {
                        con.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = UserInfo.AreaCode };
                    }
                    con.FlowCode = new ParameterValue<string>() { O = OptEnum.Equal, V = flow };
                    queryCompanyInfoList.Add(con);
                }
            }
            else
            {
                int clsId = -1;
                if (!string.IsNullOrEmpty(classId) && int.TryParse(classId, out clsId))
                {
                    queryCompanyInfoCondition.classID = new ParameterValue<int?>() { O = OptEnum.Equal, V = clsId };
                }
                if (!string.IsNullOrEmpty(corpName))
                {
                    queryCompanyInfoCondition.CorpName = new ParameterValue<string>() { O = OptEnum.Like, V = corpName };
                }
                queryCompanyInfoCondition.FlowCode = new ParameterValue<string>() { O = OptEnum.Like, V = "019" };
                ////两位地区则不做地区限制，能够看到外地企业
                if (UserInfo.AreaCode.Length >= 4)
                {
                    queryCompanyInfoCondition.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = UserInfo.AreaCode };
                }
                queryCompanyInfoList.Add(queryCompanyInfoCondition);
            }
            return JsonConvert.SerializeObject(queryCompanyInfoList);
        }

        private void InitStatisticsCondition()
        {
            string statistics = Request.QueryString["statistics"];
            if (!string.IsNullOrEmpty(statistics) && statistics == "1")
            {
                string flowcode = Request.QueryString["flowcode"];
                flowcode = Server.UrlDecode(flowcode);
                List<QueryCompanyInfoCondition> conditionList = new List<QueryCompanyInfoCondition>();
                if (string.IsNullOrEmpty(flowcode))
                {
                    var con = CreateCommonCompanyCondition();
                    con.FlowCode = new ParameterValue<string>() { O = OptEnum.Like, V = "019" };
                    conditionList.Add(con);
                }
                else
                {
                    string[] flows = flowcode.Split('|');
                    foreach (string f in flows)
                    {
                        var con = CreateCommonCompanyCondition();
                        con.FlowCode = new ParameterValue<string>() { O = OptEnum.Equal, V = f };
                        conditionList.Add(con);
                    }
                }
                hdnCondition.Value = JsonConvert.SerializeObject(conditionList);
            }
        }

        private QueryCompanyInfoCondition CreateCommonCompanyCondition()
        {
            string areaCode = Request.QueryString["areacode"].Trim();
            string classid = Request.QueryString["classid"];
            QueryCompanyInfoCondition con = new QueryCompanyInfoCondition();
            if (!string.IsNullOrEmpty(areaCode))
            {
                if (areaCode.EndsWith("99"))
                {
                    con.AreaCode = new ParameterValue<string>() { O = OptEnum.NotStartWith, V = UserInfo.CurrentArea };
                }
                else
                {
                    con.AreaCode = new ParameterValue<string>() { O = OptEnum.StartWith, V = areaCode };
                }
            }
            if (!string.IsNullOrEmpty(classid))
            {
                int clsId = 0;
                int.TryParse(classid, out clsId);
                con.classID = new ParameterValue<int?>() { O = OptEnum.Equal, V = clsId };
            }
            return con;
        }

        private List<string> GetFlowCodes()
        {
            string flowCode = ddlStatus.SelectedValue;
            List<string> listFlow = new List<string>();
            foreach (var f in flowCode.Split('|'))
            {
                if (!string.IsNullOrEmpty(f))
                {
                    listFlow.Add(f);
                }
            }
            return listFlow;
        }

        private void BindFlowCode()
        {
            string classid = Request.QueryString["classid"];
            string msg = string.Empty;
            var dic = JsonConvert.DeserializeObject<Dictionary<string, string>>(basicServiceClient.GetAllFlowStatus(out msg, UserInfo.CurrentArea, UserInfo.RoleId, classid));
            ddlStatus.Items.Clear();
            foreach (var key in dic.Keys)
            {
                ddlStatus.Items.Add(new ListItem(key, dic[key]));
            }
            ddlStatus.Items.Insert(0, new ListItem("全部", ""));
            if (UserInfo.RoleType == "User")
            {
                lblSh.Visible = false;
                divSearch.Visible = false;
                //btnJsth.Visible = false;
                //btnTh.Visible = false;
                //btnSh.Visible = false;
                //btnJsth.Visible = false;
                if (dic.ContainsKey("完成"))
                {
                    ddlStatus.Items.FindByText("完成").Selected = true;
                }
                ddlStatus.Visible = false;
                return;
            }
            if (dic.ContainsKey("处理中"))
            {
                ddlStatus.Items.FindByText("处理中").Selected = true;
            }
        }
    }
}